﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using Lists;
using BasicForms;
using GeneralLibs;


namespace ReportGenerators.Khac
{
    public partial class FrmThamSoBaoCaoKetQuaHoatDongKinhDoanh : BasicForms.FrmThamSoBaoCao
    {
        public FrmThamSoBaoCaoKetQuaHoatDongKinhDoanh()
        {
            InitializeComponent();
        }

        private List<DateTime> DetectThoiGianKyTruoc(string kyBaoCao,
                                       DevExpress.XtraEditors.ComboBoxEdit cmbKyBaoCao,
                                       DevExpress.XtraEditors.DateEdit dtThoiDiemDau,
                                       DevExpress.XtraEditors.DateEdit dtThoiDiemCuoi)
        {
            try
            {
                DateTime ngayBatDauKyNay = dtThoiDiemDau.DateTime;
                DateTime ngayKetThucKyNay = dtThoiDiemCuoi.DateTime;

                DateTime ngayBatDau = DateTime.Now;
                DateTime ngayKetThuc = DateTime.Now;

                switch (kyBaoCao)
                {
                    case "Hôm nay": //Hôm qua
                        DateTime now = GeneralLibs.CommonLib.GetSystemDateTime();
                        ngayBatDau = new DateTime(DateTime.Now.AddDays(-1).Year, DateTime.Now.AddDays(-1).Month, DateTime.Now.AddDays(-1).Day, 0, 0, 0);
                        ngayKetThuc = new DateTime(DateTime.Now.AddDays(-1).Year, DateTime.Now.AddDays(-1).Month, DateTime.Now.AddDays(-1).Day, 23, 59, 59);
                        break;
                    case "Tháng này": //Tháng trước
                    case "Tháng 1":
                    case "Tháng 2":
                    case "Tháng 3":
                    case "Tháng 4":
                    case "Tháng 5":
                    case "Tháng 6":
                    case "Tháng 7":
                    case "Tháng 8":
                    case "Tháng 9":
                    case "Tháng 10":
                    case "Tháng 11":
                    case "Tháng 12":
                        DateTime lastDayOfPreviousMonth = ngayBatDauKyNay.AddDays(-1);
                        ngayBatDau = new DateTime(ngayBatDauKyNay.AddMonths(-1).Year, ngayBatDauKyNay.AddMonths(-1).Month, ngayBatDauKyNay.AddMonths(-1).Day, 0, 0, 0);
                        ngayKetThuc = new DateTime(lastDayOfPreviousMonth.Year, lastDayOfPreviousMonth.Month, lastDayOfPreviousMonth.Day, 23, 59, 59);
                        break;
                    case "Cả năm":  //Năm trước
                        ngayBatDau = new DateTime(GeneralLibs.Config.NamTaiChinh - 1, 1, 1, 0, 0, 0);
                        ngayKetThuc = new DateTime(GeneralLibs.Config.NamTaiChinh - 1, 12, 31, 23, 59, 59);
                        break;
                    case "Quý I":   // Quý 4 năm trước
                        ngayBatDau = new DateTime(GeneralLibs.Config.NamTaiChinh - 1, 10, 1, 0, 0, 0);
                        ngayKetThuc = new DateTime(GeneralLibs.Config.NamTaiChinh - 1, 12, 31, 23, 59, 59);
                        break;
                    case "Quý II":
                        ngayBatDau = new DateTime(GeneralLibs.Config.NamTaiChinh, 1, 1);
                        ngayKetThuc = new DateTime(GeneralLibs.Config.NamTaiChinh, 3, 31, 23, 59, 59);
                        break;
                    case "Quý III":
                        ngayBatDau = new DateTime(GeneralLibs.Config.NamTaiChinh, 4, 1);
                        ngayKetThuc = new DateTime(GeneralLibs.Config.NamTaiChinh, 6, 30, 23, 59, 59);
                        break;
                    case "Quý IV":
                        ngayBatDau = new DateTime(GeneralLibs.Config.NamTaiChinh, 7, 1);
                        ngayKetThuc = new DateTime(GeneralLibs.Config.NamTaiChinh, 9, 30, 23, 59, 59);
                        break;
                    case "":
                        if (cmbKyBaoCao.SelectedText == "") cmbKyBaoCao.SelectedText = "Tùy chọn";
                        TimeSpan span = dtThoiDiemCuoi.DateTime - dtThoiDiemDau.DateTime;
                        int day = Math.Abs(span.Days);
                        ngayBatDau = new DateTime(ngayBatDauKyNay.AddDays(-day).Year, ngayBatDauKyNay.AddDays(-day).Month, ngayBatDauKyNay.AddDays(-day).Day, 0, 0, 0);
                        ngayKetThuc = new DateTime(ngayKetThucKyNay.AddDays(-day).Year, ngayKetThucKyNay.AddDays(-day).Month, ngayKetThucKyNay.AddDays(-day).Day,
                            ngayBatDauKyNay.AddSeconds(-1).Hour, ngayBatDauKyNay.AddSeconds(-1).Minute, ngayBatDauKyNay.AddSeconds(-1).Second);
                        break;
                    case "Tùy chọn":
                    default:
                        span = dtThoiDiemCuoi.DateTime - dtThoiDiemDau.DateTime;
                        int numberofday = Math.Abs(span.Days);
                        ngayBatDau = new DateTime(ngayBatDauKyNay.AddDays(-numberofday).Year, ngayBatDauKyNay.AddDays(-numberofday).Month, ngayBatDauKyNay.AddDays(-numberofday).Day, 0, 0, 0);
                        ngayKetThuc = new DateTime(ngayKetThucKyNay.AddDays(-numberofday).Year, ngayKetThucKyNay.AddDays(-numberofday).Month, ngayKetThucKyNay.AddDays(-numberofday).Day,
                            ngayBatDauKyNay.AddSeconds(-1).Hour, ngayBatDauKyNay.AddSeconds(-1).Minute, ngayBatDauKyNay.AddSeconds(-1).Second);
                        break;
                }
                return new List<DateTime> { ngayBatDau, ngayKetThuc };
            }
            catch (Exception ex)
            {
                if (ex is CustomException) throw ex;
                else
                {
                    throw new Exception(ex.Message);
                }
                return null;
            }
        }

        private List<decimal> TinhToanTongHop(DateTime ngayBatDau, DateTime ngayKetThuc)
        {
            SqlConnection con = new SqlConnection(GeneralLibs.LocalSettings.ConnectString);
            ReportTemplates.Khac.BaoCaoKetQuaHoatDongKinhDoanh.DsBaoCaoKetQuaHoatDongKinhDoanh ds = new ReportTemplates.Khac.BaoCaoKetQuaHoatDongKinhDoanh.DsBaoCaoKetQuaHoatDongKinhDoanh();
            try
            {
                con.Open();
                SqlCommand cmd = con.CreateCommand(); cmd.CommandTimeout = Config.TimeOut;
                SqlDataAdapter da = null;
                SqlDataReader dr = null;

                //Tính toán con số
                //1. Doanh số bán buôn bán lẻ
                decimal doanhSoBanBuon = 0, doanhSoBanLe = 0;
                #region Tách doanh số bán buôn và bán lẻ - kỳ này
                //bán buôn
                cmd.CommandText = "SELECT SUM(Value7) AS DoanhSoBanBuon, SUM(Value7 - Value3) AS LaiBanBuon\n" +
                                      "FROM KhoanMucChungTu \n" +
                                      "WHERE ChungTuID IN (SELECT ChungTuID FROM ChungTu  \n" +
                                      "					WHERE ChungTuGocID IN (SELECT ChungTuID \n" +
                                      "											FROM ChungTu \n" +
                                      "											WHERE LoaiChungTuID IN (SELECT ID FROM LoaiChungTu \n" +
                                      "																	WHERE Ma IN (N'HoaDonBanHang') \n" +
                                      "																	) \n" +
                                      "                                                    AND @ThoiDiemDau <= Ngay AND Ngay <= @ThoiDiemCuoi \n" +
                                      "											)\n" +
                                      "                   )\n" +
                                      " AND Value5 IS NOT NULL AND Value3 IS NOT NULL ";
                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("ThoiDiemDau", ngayBatDau);
                cmd.Parameters.AddWithValue("ThoiDiemCuoi", ngayKetThuc);

                dr = cmd.ExecuteReader();
                if (dr.Read())
                {
                    try
                    {
                        if (dr["DoanhSoBanBuon"] != DBNull.Value)
                        {
                            doanhSoBanBuon = (decimal)dr["DoanhSoBanBuon"];
                        }
                    }
                    catch
                    {
                    }
                }
                dr.Close();

                //bán lẻ
                cmd.CommandText = "SELECT SUM(Value7) AS DoanhSoBanLe,  SUM(Value7 - Value3) AS LaiBanLe\n" +
                                      "FROM KhoanMucChungTu \n" +
                                      "WHERE ChungTuID IN (SELECT ChungTuID FROM ChungTu  \n" +
                                      "					WHERE ChungTuGocID IN (SELECT ChungTuID \n" +
                                      "											FROM ChungTu \n" +
                                      "											WHERE LoaiChungTuID IN (SELECT ID FROM LoaiChungTu \n" +
                                      "																	WHERE Ma IN (N'HoaDonBanLe') \n" +
                                      "																	) \n" +
                                      "                                                    AND @ThoiDiemDau <= Ngay AND Ngay <= @ThoiDiemCuoi \n" +
                                      "											)\n" +
                                      "                   )\n" +
                                      " AND Value5 IS NOT NULL AND Value3 IS NOT NULL ";
                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("ThoiDiemDau", ngayBatDau);
                cmd.Parameters.AddWithValue("ThoiDiemCuoi", ngayKetThuc);

                dr = cmd.ExecuteReader();
                if (dr.Read())
                {
                    try
                    {
                        if (dr["DoanhSoBanLe"] != DBNull.Value)
                        {
                            doanhSoBanLe = (decimal)dr["DoanhSoBanLe"];
                        }
                    }
                    catch
                    {
                    }
                }
                dr.Close();
                #endregion

                //2,3. Tính lãi gộp && giá vốn hàng bán ra
                decimal laiGop = 0, giaVonHangBan = 0;
                #region Lãi gộp %% giá vốn hàng bán ra

                cmd.CommandText = "SELECT SUM(Value7) AS DoanhSoBan, SUM(Value7 - Value3) AS Lai, SUM(Value3) GiaVonBanRa\n" +
                                        "FROM KhoanMucChungTu \n" +
                                        "WHERE ChungTuID IN (SELECT ChungTuID FROM ChungTu  \n" +
                                        "					WHERE ChungTuGocID IN (SELECT ChungTuID \n" +
                                        "											FROM ChungTu \n" +
                                        "											WHERE LoaiChungTuID IN (SELECT ID FROM LoaiChungTu \n" +
                                        "																	WHERE Ma IN (N'HoaDonBanHang', N'HoaDonBanLe') \n" +
                                        "																	) \n" +
                                        "                                                    AND @ThoiDiemDau <= Ngay AND Ngay <= @ThoiDiemCuoi \n" +
                                        "											)\n" +
                                        "                   )\n" +
                                        " AND Value5 IS NOT NULL AND Value3 IS NOT NULL ";
                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("ThoiDiemDau", ngayBatDau);
                cmd.Parameters.AddWithValue("ThoiDiemCuoi", ngayKetThuc);

                dr = cmd.ExecuteReader();
                if (dr.Read())
                {
                    try
                    {
                        if (dr["Lai"] != DBNull.Value)
                            laiGop = (decimal)dr["Lai"];
                        if (dr["GiaVonBanRa"] != DBNull.Value)
                            giaVonHangBan = (decimal)dr["GiaVonBanRa"];
                    }
                    catch
                    { }
                }
                dr.Close();

                #endregion

                //4. Tính chi phí sản xuất
                Guid taiKhoanChiPhiSXID = (Guid)DanhMucTaiKhoan.Instance.GetBySoHieu("213").ID;
                SoDuTaiKhoan soDu213 = SoDuTaiKhoan.CalculatePhatSinhTrongKySauBuTru(cmd, ngayBatDau, ngayKetThuc, taiKhoanChiPhiSXID);
                decimal chiPhiSX = Math.Abs(soDu213.DuNo - soDu213.DuCo);

                //5. Chi phí hoạt động 641 . 642
                decimal chiPhiHoatDong = 0;
                TaiKhoan tk641 = DanhMucTaiKhoan.Instance.GetBySoHieu("641");
                TaiKhoan tk642 = DanhMucTaiKhoan.Instance.GetBySoHieu("642");
                TaiKhoan tk334 = DanhMucTaiKhoan.Instance.GetBySoHieu("334");
                TaiKhoan tk3383 = DanhMucTaiKhoan.Instance.GetBySoHieu("3383");
                TaiKhoan tk3384 = DanhMucTaiKhoan.Instance.GetBySoHieu("3384");

                SoDuTaiKhoan soDu641 = SoDuTaiKhoan.CalculatePhatSinhTrongKySauBuTru(cmd, ngayBatDau, ngayKetThuc, tk641.ID);
                SoDuTaiKhoan soDu642 = SoDuTaiKhoan.CalculatePhatSinhTrongKySauBuTru(cmd, ngayBatDau, ngayKetThuc, tk642.ID);
                SoDuTaiKhoan soDu334 = SoDuTaiKhoan.CalculatePhatSinhTrongKySauBuTru(cmd, ngayBatDau, ngayKetThuc, tk334.ID);
                SoDuTaiKhoan soDu3383 = SoDuTaiKhoan.CalculatePhatSinhTrongKySauBuTru(cmd, ngayBatDau, ngayKetThuc, tk3383.ID);
                SoDuTaiKhoan soDu3384 = SoDuTaiKhoan.CalculatePhatSinhTrongKySauBuTru(cmd, ngayBatDau, ngayKetThuc, tk3384.ID);

                decimal phatSinh641 = Math.Abs(soDu641.DuNo - soDu641.DuCo);
                decimal phatSinh642 = Math.Abs(soDu642.DuNo - soDu642.DuCo);
                decimal phatSinh334 = Math.Abs(soDu334.DuNo - soDu334.DuCo);
                decimal phatSinh3383 = Math.Abs(soDu3383.DuNo - soDu3383.DuCo);
                decimal phatSinh3384 = Math.Abs(soDu3384.DuNo - soDu3384.DuCo);

                chiPhiHoatDong = phatSinh641 + phatSinh642 + phatSinh334 + phatSinh3383 + phatSinh3384;

                //6. Thu khác 711, 515
                decimal thuKhac = 0;
                TaiKhoan tk711 = DanhMucTaiKhoan.Instance.GetBySoHieu("711");
                TaiKhoan tk515 = DanhMucTaiKhoan.Instance.GetBySoHieu("515");
                SoDuTaiKhoan soDu711 = SoDuTaiKhoan.CalculatePhatSinhTrongKySauBuTru(cmd, ngayBatDau, ngayKetThuc, tk711.ID);
                SoDuTaiKhoan soDu515 = SoDuTaiKhoan.CalculatePhatSinhTrongKySauBuTru(cmd, ngayBatDau, ngayKetThuc, tk515.ID);
                decimal phatSinh711 = Math.Abs(soDu711.DuNo - soDu711.DuCo);
                decimal phatSinh515 = Math.Abs(soDu515.DuNo - soDu515.DuCo);
                thuKhac = phatSinh711 + phatSinh515;

                //7. Chi phí khác 811, 635
                decimal chiPhiKhac = 0;
                TaiKhoan tk811 = DanhMucTaiKhoan.Instance.GetBySoHieu("811");
                TaiKhoan tk635 = DanhMucTaiKhoan.Instance.GetBySoHieu("635");
                SoDuTaiKhoan soDu811 = SoDuTaiKhoan.CalculatePhatSinhTrongKySauBuTru(cmd, ngayBatDau, ngayKetThuc, tk811.ID);
                SoDuTaiKhoan soDu635 = SoDuTaiKhoan.CalculatePhatSinhTrongKySauBuTru(cmd, ngayBatDau, ngayKetThuc, tk635.ID);
                decimal phatSinh811 = Math.Abs(soDu811.DuCo - soDu811.DuNo);
                decimal phatSinh635 = Math.Abs(soDu635.DuCo - soDu635.DuNo);
                chiPhiKhac = phatSinh811 + phatSinh635;

                //8. Lợi nhuân khác
                decimal loiNhuanKhac = thuKhac - chiPhiKhac;

                //9. Thuế thu nhập + VAT
                TaiKhoan tk821 = DanhMucTaiKhoan.Instance.GetBySoHieu("821");  // Thuế thu nhập doanh nghiệp
                TaiKhoan tk333 = DanhMucTaiKhoan.Instance.GetBySoHieu("333");  //THuế VAT
                SoDuTaiKhoan soDu821 = SoDuTaiKhoan.CalculatePhatSinhTrongKySauBuTru(cmd, ngayBatDau, ngayKetThuc, tk821.ID);
                SoDuTaiKhoan soDu333 = SoDuTaiKhoan.CalculatePhatSinhTrongKySauBuTru(cmd, ngayBatDau, ngayKetThuc, tk333.ID);
                decimal phatSinh821 = Math.Abs(soDu821.DuNo - soDu821.DuCo);
                decimal phatSinh333 = Math.Abs(soDu333.DuNo - soDu333.DuCo);
                decimal tienThue = phatSinh821 + phatSinh333;

                //10. Lợi nhuận ròng
                decimal loiNhuanRong = laiGop + loiNhuanKhac - chiPhiSX - chiPhiHoatDong - tienThue;

                //11, 12. Tổng thu, chi
                decimal tongThu = NhatKyThuChi.TongThu(cmd, ngayBatDau, ngayKetThuc);
                decimal tongChi = NhatKyThuChi.TongChi(cmd, ngayBatDau, ngayKetThuc);

                //13. Tổng giá trị hàng nhập
                decimal tongGiaTriNhapHang = 0;
                #region Tổng giá trị hàng nhập

                cmd.CommandText = "SELECT SUM(A.SoTienNT) TienMuaHang\n" +
                                  "FROM ChungTu A INNER JOIN LoaiChungTu B ON A.LoaiChungTuID = B.ID AND B.Ma = 'HoaDonMuaHang' \n" +
                                  "WHERE @ThoiDiemDau <= Ngay AND Ngay <= @ThoiDiemCuoi ";

                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("ThoiDiemDau", ngayBatDau);
                cmd.Parameters.AddWithValue("ThoiDiemCuoi", ngayKetThuc);

                dr = cmd.ExecuteReader();
                if (dr.Read())
                {
                    try
                    {
                        if (dr["TienMuaHang"] != DBNull.Value)
                            tongGiaTriNhapHang = (decimal)dr["TienMuaHang"];
                    }
                    catch
                    { }
                }
                dr.Close();

                #endregion

                SoDuTaiKhoan soPhatSinhMuaBanTienMat = SoDuTaiKhoan.CalculatePhatSinhMuaBanHangTheoPhuongThucThanhToan(cmd, ngayBatDau, ngayKetThuc, "TIENMAT");
                //14. Tổng chi công nợ
                decimal chiCongNo = 0;
                TaiKhoan tk331 = DanhMucTaiKhoan.Instance.GetBySoHieu("331");
                SoDuTaiKhoan soDu331 = SoDuTaiKhoan.CalculatePhatSinhTrongKy_KhongBuTru(cmd, ngayBatDau, ngayKetThuc, tk331.ID);
                chiCongNo = soDu331.DuNo + soPhatSinhMuaBanTienMat.DuCo;

                //15. Tổng thu công nợ
                decimal thuCongNo = 0;
                TaiKhoan tk131 = DanhMucTaiKhoan.Instance.GetBySoHieu("131");
                SoDuTaiKhoan soDu131 = SoDuTaiKhoan.CalculatePhatSinhTrongKy_KhongBuTru(cmd, ngayBatDau, ngayKetThuc, tk131.ID);
                thuCongNo = soDu131.DuCo + soPhatSinhMuaBanTienMat.DuNo;

                //16. Nguồn vốn
                decimal nguonVon = 0;
                Guid taiKhoanNguonVonKinhDoanhID = (Guid)DanhMucTaiKhoan.Instance.GetBySoHieu("4111").ID;
                SoDuTaiKhoan soDuTaiKhoanNguonVonKinhDoanh = SoDuTaiKhoan.CalculateSoDuSauBuTru(ngayKetThuc, taiKhoanNguonVonKinhDoanhID);
                nguonVon = soDuTaiKhoanNguonVonKinhDoanh.DuCo - soDuTaiKhoanNguonVonKinhDoanh.DuNo;

                return new List<decimal> { doanhSoBanLe, doanhSoBanBuon, giaVonHangBan, laiGop, chiPhiSX, 
                    chiPhiHoatDong, thuKhac, chiPhiKhac, loiNhuanKhac, tienThue, loiNhuanRong, 
                    tongThu, tongChi, tongGiaTriNhapHang, chiCongNo, thuCongNo, nguonVon};
            }
            catch (Exception ex)
            {
                BasicForms.FrmExceptionNotifier.ShowAndLog(ex);
                return null;
            }
            finally
            {
                con.Close();
                con = null;
            }
        }

        protected override void PrepareDataForReport()
        {
            BasicForms.FrmProgressBarDev.StartShowProgress();

            SqlConnection con = new SqlConnection(GeneralLibs.LocalSettings.ConnectString);
            ReportTemplates.Khac.BaoCaoKetQuaHoatDongKinhDoanh.DsBaoCaoKetQuaHoatDongKinhDoanh ds = new ReportTemplates.Khac.BaoCaoKetQuaHoatDongKinhDoanh.DsBaoCaoKetQuaHoatDongKinhDoanh();
            try
            {
                con.Open();
                SqlCommand cmd = con.CreateCommand(); cmd.CommandTimeout = Config.TimeOut;
                SqlDataAdapter da = null;
                SqlDataReader dr = null;

                cmd.CommandText = "Select_ThongTinDoanhNghiep2";
                cmd.Parameters.Clear();
                da = new SqlDataAdapter(cmd);
                da.Fill(ds.ThongTinDoanhNghiep);

                //Tính kỳ này
                DateTime ngayBatDau = dtNgayBatDau.DateTime;
                DateTime ngayKetThuc = dtNgayKetThuc.DateTime;

                List<decimal> soLieuKyNay = TinhToanTongHop(ngayBatDau, ngayKetThuc);
                List<DateTime> kyTruoc = DetectThoiGianKyTruoc(cmbKyBaoCao.Text.Trim(), cmbKyBaoCao, dtNgayBatDau, dtNgayKetThuc);
                List<decimal> soLieuKyTruoc = TinhToanTongHop(kyTruoc[0], kyTruoc[1]);

                DataRow rowMaster = ds.Master.NewRow();
                rowMaster["NgayBatDau"] = ngayBatDau;
                rowMaster["NgayKetThuc"] = ngayKetThuc;
                rowMaster["NgayBatDau2"] = kyTruoc[0];
                rowMaster["NgayKetThuc2"] = kyTruoc[1];
                rowMaster["NguoiLapPhieu"] = CustomSecurity.User.CurUser.FullName;
                ds.Master.Rows.Add(rowMaster);

                //Fill vào table
                for (int i = 0; i <= soLieuKyNay.Count; i++) //Xét 17 dòng
                {
                    DataRow rowDetail = ds.Detail.NewRow();
                    switch (i)
                    {
                        case 0:
                            //rowDetail["ChiTieu"] = "1. Doanh thu bán hàng và cung cấp dịch vụ";
                            //rowDetail["TaiKhoan"] = "511";
                            break;
                        case 1:
                            rowDetail["ChiTieu"] = "1. Doanh thu bán lẻ";
                            rowDetail["TaiKhoan"] = "";
                            rowDetail["Value1"] = soLieuKyNay[i - 1];
                            rowDetail["Value2"] = soLieuKyTruoc[i - 1];
                            break;
                        case 2:
                            rowDetail["ChiTieu"] = "  - Doanh thu bán buôn ";
                            rowDetail["TaiKhoan"] = "";
                            rowDetail["Value1"] = soLieuKyNay[i - 1];
                            rowDetail["Value2"] = soLieuKyTruoc[i - 1];
                            break;
                        case 3:
                            rowDetail["ChiTieu"] = "2. Giá vốn hàng bán";
                            rowDetail["TaiKhoan"] = "";
                            rowDetail["Value1"] = soLieuKyNay[i - 1];
                            rowDetail["Value2"] = soLieuKyTruoc[i - 1];
                            break;
                        case 4:
                            rowDetail["ChiTieu"] = "3. Lợi nhuận gộp bán hàng và cung cấp dịch vụ";
                            rowDetail["TaiKhoan"] = "=(1-2)";
                            rowDetail["Value1"] = soLieuKyNay[i - 1];
                            rowDetail["Value2"] = soLieuKyTruoc[i - 1];
                            break;
                        case 5:
                            //rowDetail["ChiTieu"] = "4. Chi phí sản xuất";
                            //rowDetail["TaiKhoan"] = "213";
                            //rowDetail["Value1"] = soLieuKyNay[i - 1];
                            //rowDetail["Value2"] = soLieuKyTruoc[i - 1];
                            break;
                        case 6:
                            rowDetail["ChiTieu"] = "4. Chi phí hoạt động";
                            rowDetail["TaiKhoan"] = "641+642+334+3383+3384";
                            rowDetail["Value1"] = soLieuKyNay[i - 1];
                            rowDetail["Value2"] = soLieuKyTruoc[i - 1];
                            break;
                        case 7:
                            rowDetail["ChiTieu"] = "5. Thu nhập khác";
                            rowDetail["TaiKhoan"] = "711+515";
                            rowDetail["Value1"] = soLieuKyNay[i - 1];
                            rowDetail["Value2"] = soLieuKyTruoc[i - 1];
                            break;
                        case 8:
                            rowDetail["ChiTieu"] = "6.  Chi phí khác";
                            rowDetail["TaiKhoan"] = "811+635";
                            rowDetail["Value1"] = soLieuKyNay[i - 1];
                            rowDetail["Value2"] = soLieuKyTruoc[i - 1];
                            break;
                        case 9:
                            rowDetail["ChiTieu"] = "7. Lợi nhuận khác";
                            rowDetail["TaiKhoan"] = "=(5-6)";
                            rowDetail["Value1"] = soLieuKyNay[i - 1];
                            rowDetail["Value2"] = soLieuKyTruoc[i - 1];
                            break;
                        case 10:
                            //rowDetail["ChiTieu"] = "9. Thuế thu nhập doanh nghiệp + VAT";
                            //rowDetail["TaiKhoan"] = "821+333";
                            //rowDetail["Value1"] = soLieuKyNay[i - 1];
                            //rowDetail["Value2"] = soLieuKyTruoc[i - 1];
                            break;
                        case 11:
                            rowDetail["ChiTieu"] = "8. Lợi nhuận sau khi trừ các chi phí";
                            rowDetail["TaiKhoan"] = "=[(3+7)-4]";
                            rowDetail["Value1"] = soLieuKyNay[i - 1];
                            rowDetail["Value2"] = soLieuKyTruoc[i - 1];
                            break;
                        case 12:
                            rowDetail["ChiTieu"] = "9. Tổng thu TM + TGNH";
                            rowDetail["TaiKhoan"] = "111+112";
                            rowDetail["Value1"] = soLieuKyNay[i - 1];
                            rowDetail["Value2"] = soLieuKyTruoc[i - 1];
                            break;
                        case 13:
                            rowDetail["ChiTieu"] = "10. Tổng chi TM+ TGNH";
                            rowDetail["TaiKhoan"] = "111+112";
                            rowDetail["Value1"] = soLieuKyNay[i - 1];
                            rowDetail["Value2"] = soLieuKyTruoc[i - 1];
                            break;
                        case 14:
                            rowDetail["ChiTieu"] = "11. Tổng giá trị hàng mua";
                            rowDetail["TaiKhoan"] = "156";
                            rowDetail["Value1"] = soLieuKyNay[i - 1];
                            rowDetail["Value2"] = soLieuKyTruoc[i - 1];
                            break;
                        case 15:
                            rowDetail["ChiTieu"] = "12. Tổng thanh toán công nợ";
                            rowDetail["TaiKhoan"] = "331";
                            rowDetail["Value1"] = soLieuKyNay[i - 1];
                            rowDetail["Value2"] = soLieuKyTruoc[i - 1];
                            break;
                        case 16:
                            rowDetail["ChiTieu"] = "13. Tổng thu công nợ";
                            rowDetail["TaiKhoan"] = "131";
                            rowDetail["Value1"] = soLieuKyNay[i - 1];
                            rowDetail["Value2"] = soLieuKyTruoc[i - 1];
                            break;
                        case 17:
                            rowDetail["ChiTieu"] = "14. Số dư nguồn vốn";
                            rowDetail["TaiKhoan"] = "4111";
                            rowDetail["Value1"] = soLieuKyNay[i - 1];
                            rowDetail["Value2"] = soLieuKyTruoc[i - 1];
                            break;
                        default:
                            break;
                    }

                    if (rowDetail["ChiTieu"] is string && (string)rowDetail["ChiTieu"] != "")
                        ds.Detail.Rows.Add(rowDetail);
                }

                if (ds.Tables.Count > 0)
                {
                    _Report = new ReportTemplates.Khac.BaoCaoKetQuaHoatDongKinhDoanh.RptBaoCaoKetQuaHoatDongKinhDoanh();
                    _Report.SetDataSource(ds);
                }
            }
            catch (Exception ex)
            {
                BasicForms.FrmExceptionNotifier.ShowAndLog(ex);
            }
            finally
            {
                con.Close();
                con = null;
            }

            BasicForms.FrmProgressBarDev.FinishShowProgress();
        }

        protected override void PrintReport()
        {
            if (_Report != null)
            {
                ReportTemplates.FrmPrintReport frm = new ReportTemplates.FrmPrintReport(_Report, "Báo cáo kết quả hoạt động kinh doanh");
                frm.Show();
            }
        }

        private void FrmThamSoBaoCaoKinhDoanhLaiLo_Load(object sender, EventArgs e)
        {
            if (DesignMode) return;
            this.Text = " Tham số báo cáo kết quả hoạt động kinh doanh";
        }
    }
}
